import java.util.HashMap;
import java.util.Map;

public class test1 {
    //力扣  1.两数之和
    public int[] twoSum3(int[] nums, int target) {
        //暴力枚举二：固定一个数，找它前面的数
        //利用哈希表优化暴力枚举，用上面的暴力枚举二会方便许多
        //省去许多边界问题的处理
        //key是值，value是下标
        Map<Integer,Integer> hash = new HashMap<>();
        for(int i = 0;i<nums.length;i++){
            //计算需要在哈希表中找的值
            int x = target - nums[i];
            if(hash.containsKey(x)){
                return new int[]{i,hash.get(x)};
            }else{
                hash.put(nums[i],i);
            }
        }
        return new int[]{-1,-1};
    }


    //暴力枚举一：固定一个数，往后找
    public int[] twoSum1(int[] nums, int target) {
        int[] arr = new int[2];
        for(int i=0;i<nums.length-1;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    arr[0] = i;
                    arr[1] = j;
                    break;
                }
            }
        }
        return arr;
    }

    //暴力枚举二：固定一个数，找它前面的数
    public int[] twoSum2(int[] nums, int target) {

        int[] ret = new int[2];
        for(int i = 1;i<nums.length;i++){
            for(int j = i-1;j>=0;j--){
                if(nums[i]+nums[j]==target){
                    ret[0] = i;
                    ret[1] = j;
                    break;
                }
            }
        }
        return ret;
    }

}
